package com.bitoon.basketdudes.web.mensajeria;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import org.apache.log4j.Logger;

public class MensajeUsuarioV2 implements Serializable{

    private Logger log = Logger.getLogger(MensajeUsuarioV2.class);
    
    private int id;
    private int tipoUsuarioEmisor;  // 0 -> Usuario normal, 1 -> Aministrador, 2 -> Comisionado de la WBC, etc.
    private String from;            // Nick (nickMostrar) del usuario remitente
    private String fromUrl;         // Nick (nick) del usuario remitente
    private int sender;             // id del usuario remitente
    private String to;              // Nick(s) del usuario receptor(es)
    private int tipoDestinatario;   // 0 -> Usuario, 1 -> Liga privada, 
    private int receiver;           // id del usuario receptor
    private String fecha;           // fecha del envío (yyyymmddhhMMss)
    private String asunto;          // asunto del mensaje
    private String texto;           // texto del mensaje
    private int sentido;            // 0 - recibido; 1 - enviado

    //nuevos atributos
    private int numHilo;            //hilo al que pertenece el mensaje
    private int estado;             //0->no leido  1->leido, 2->Abandono conversacion
    private String idsBorrados;     //acumula los ids d managers q han borrado ese mensaje(no lo veran en el hilo)

    public static final int RECIBIDO = 0;
    public static final int ENVIADO  = 1;

    public static final int TIPO_USUARIO_NORMAL = 0;
    public static final int TIPO_USUARIO_ADMINISTRADOR_WEB = 1;
    public static final int TIPO_USUARIO_COMITE_COMPETICION = 2;
    public static final int TIPO_USUARIO_ADMINISTRADOR_TORNEO = 3;

    public MensajeUsuarioV2() {
        this.tipoDestinatario = 0;
        this.from = "";
        this.fromUrl = "";
        this.to = "";
        this.fecha = "";
        this.estado = 0;    //no leido
        this.numHilo = 0;   //hilo al que pertenece el mensaje
    }

    public MensajeUsuarioV2(int tipoDestinatario) {
        this.tipoDestinatario = tipoDestinatario;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getTipoUsuarioEmisor() {
        return tipoUsuarioEmisor;
    }

    public void setTipoUsuarioEmisor(int tipoUsuarioEmisor) {
        this.tipoUsuarioEmisor = tipoUsuarioEmisor;
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }

    public String getFromUrl() {
        return fromUrl;
    }

    public void setFromUrl(String fromUrl) {
        this.fromUrl = fromUrl;
    }

    public int getSender() {
        return sender;
    }

    public void setSender(int sender) {
        this.sender = sender;
    }

    public String getTo() {
        return to;
    }

    public void setTo(String to) {
        this.to = to;
    }

    public int getReceiver() {
        return receiver;
    }

    public void setReceiver(int receiver) {
        this.receiver = receiver;
    }

    public String getFechaF() {
        // yyyyMMddhhmmss
        return fecha.substring(6,8) + "/" + fecha.substring(4,6) + "/" + fecha.substring(0,4);
    }

    public String getHoraF() {
        // yyyyMMddhhmmss
        return fecha.substring(8,10) + "-" + fecha.substring(10,12);
    }

    public Date getFechaDate() {
        Date d = null;
        DateFormat df = new SimpleDateFormat("yyyyMMdd");
        try{
            d = df.parse(fecha.substring(0,4)+fecha.substring(4,6)+fecha.substring(6,8));
        }catch(ParseException e){}
        return d;
    }

    public String getFecha() {
        return fecha;
    }

    public void setFecha(String fecha) {
        this.fecha = fecha;
    }

    public String getAsunto() {
        return asunto;
    }

    public void setAsunto(String asunto) {
        this.asunto = asunto;
    }

    public String getTexto() {
        return texto;
    }

    public void setTexto(String texto) {
        this.texto = texto;
    }

    public int getSentido() {
        return sentido;
    }

    public void setSentido(int sentido) {
        this.sentido = sentido;
    }

    public int getTipoDestinatario() {
        return tipoDestinatario;
    }

    public void setTipoDestinatario(int tipoDestinatario) {
        this.tipoDestinatario = tipoDestinatario;
    }

    public int getNumHilo() {
        return numHilo;
    }

    public void setNumHilo(int numHilo) {
        this.numHilo = numHilo;
    }

    public int getEstado() {
        return estado;
    }

    public void setEstado(int estado) {
        this.estado = estado;
    }

    public int getTotalReceptores() {
        log.debug("[mensajes] total: " +to.split(",").length);
        return to.split(",").length;
    }

    public String dameTiempoEnvio(){
        String retorno = "";

        SimpleDateFormat formatoDelTexto = new SimpleDateFormat("yyyyMMddHHmmss");
        Date fechaInicial = new Date();
        Date fechaFinal = new Date();
        try{
            fechaInicial = formatoDelTexto.parse(fecha);

            long fechaInicialMs = fechaInicial.getTime();
            long fechaFinalMs = fechaFinal.getTime();
            long diferencia = fechaFinalMs - fechaInicialMs;
            int segundos = Math.round(diferencia / (1000));
            int minutos = Math.round(diferencia / (1000 * 60));
            int horas = Math.round(diferencia / (1000 * 60 * 60));
            int dias = Math.round(diferencia / (1000 * 60 * 60 * 24));
            
            SimpleDateFormat formateador = null;
            formateador = new SimpleDateFormat(
                    "dd 'de' MMMM 'de' yyyy HH:mm:ss", new Locale("es_ES"));
            System.out.println(formateador.format(fechaInicial));
            System.out.println(formateador.format(fechaFinal));

            if(horas < 24){ //Devolvemos hace unos segunos,minutos o si pasa de 1hora las horas
                if(minutos<60){
                     if(segundos<60){
                         retorno = "Hace unos segundos";
                     }else{
                         if(minutos==1){
                            retorno = "Hace " + minutos + " minuto";
                         }
                         else{
                             retorno = "Hace " + minutos + " minutos";
                         }
                     }
                }else{
                    if(horas==1){
                        retorno = "Hace " + horas + " hora";
                    }else{
                        retorno = "Hace " + horas + " horas";
                    }
                }
            }else{ //devolvemos fecha, si ha pasado un año ,con el año incluido 
                if(dias<365){
                    formateador = new SimpleDateFormat(
                    "dd 'de' MMMM", new Locale("es_ES"));
                }
                else{
                    formateador = new SimpleDateFormat(
                    "dd 'de' MMMM 'de' yyyy", new Locale("es_ES"));
                }
                retorno = formateador.format(fechaInicial);
            }
        } catch(Exception e){ System.out.println(e); }

        return retorno;
    }

    public boolean esBorrado(int id){
    /*Devuelve false si un usuario a borrado este mensaje de su hilo*/

        boolean sw=true;

        if(idsBorrados!=null && idsBorrados.compareTo("")!=0){
            int i=0;
            String[] ids = idsBorrados.split(",");

            while(sw==true && i<ids.length){
                //log.debug("ids: "+ids[i]);
                if(Integer.parseInt(ids[i])==id){
                    sw=false;
                }
                ++i;
            }
        }
        return sw;
    }

    public String getIdsBorrados() {
        return idsBorrados;
    }

    public void setIdsBorrados(String idsBorrados) {
        this.idsBorrados = idsBorrados;
    }

}